# -*- coding: utf-8 -*-

'''
projecto- classe destinada aos cálculos
autor- Ana Isabel Marques 6052
data de criação do módulo- 05/05/2013
'''
import math

class Calculos:
        '''
        Calcula a média
        Retorna a média
        @param tempos - tempos de execução calculados
        '''
        def calculaMedia(self, tempos):
                media = reduce(lambda x, y: x + y, tempos) / len(tempos)
                return media

        '''
        Calcula a variância
        Retorna o variância
        @param tempos - tempos de execução calculados
        @param media -media
        '''
        def calculaVariancia(self, tempos, media):
                var = reduce(lambda x, y: x + (y-media)**2, [0] + tempos) / len(tempos)
                return var

        '''
        Calcula o desvio-padrão
        Retorna o desvio-padrão
        @param variância - variância
        '''
        def calculaDesvioPadrao(self, variancia):
                desvioPadrao = math.sqrt(variancia)
                return desvioPadrao

        '''
        Calcula o erro amostral
        Retorna o erro amostral
        @param desvioPadrao - desvio-padrão
        @param n - tamanho de entrada da lista
        '''
        def calculaErroAmostral(self, desvioPadrao, n):
                erro_amostral = desvioPadrao / (math.sqrt(n))
                return erro_amostral

        '''
        Returna uma função linear : O(n) = n 
        @param n - tamanho de entrada da lista
        '''
        def complexidadeTemporalLinear(self, n):
                return n

        '''
        Returna uma função quadrática : O(n) = n² 
        @param n - tamanho de entrada da lista
        '''
        def complexidadeTemporalQuadratica(self, n):
                return n**2

        '''
        Returna uma função logarítmica : O(n) = n log(n)
        @param n - tamanho de entrada da lista
        '''
        def complexidadeTemporalLogaritmica(self, n):
                return n * math.log(n)

